const { app, BrowserWindow, ipcMain } = require("electron");
const path = require("path");
const { initMain } = require("electron-audio-loopback");

// 初始化 electron-audio-loopback 插件
// 必须在 app ready 之前调用
initMain();

let mainWindow;

function createWindow() {
  // 创建浏览器窗口
  mainWindow = new BrowserWindow({
    width: 1440,
    height: 880,
    webPreferences: {
      nodeIntegration: false,
      contextIsolation: true,
      enableRemoteModule: false,
      preload: path.join(__dirname, "preload.js"),
    },
    icon: path.join(__dirname, "assets/icon.png"), // 可选：应用图标
    title: "音频频谱分析器 - T270LG 设备",
  });

  // 设置设备权限处理器
  mainWindow.webContents.session.setDevicePermissionHandler(() => {
    return true;
  });

  // 设置媒体权限
  mainWindow.webContents.session.setPermissionRequestHandler(
    (webContents, permission, callback) => {
      console.log(`请求权限: ${permission}`);
      if (
        permission === "media" ||
        permission === "camera" ||
        permission === "microphone"
      ) {
        callback(true);
      } else {
        callback(false);
      }
    }
  );

  // 设置媒体权限检查
  mainWindow.webContents.session.setPermissionCheckHandler(
    (webContents, permission, requestingOrigin, details) => {
      console.log(`检查权限: ${permission}`);
      if (
        permission === "media" ||
        permission === "camera" ||
        permission === "microphone"
      ) {
        return true;
      }
      return false;
    }
  );

  //   mainWindow.loadFile("matrix.html");

  // 开发模式下打开开发者工具
  if (!app.isPackaged) {
    mainWindow.loadURL("http://localhost:3000");
    mainWindow.webContents.openDevTools();
  } else {
    // 生产模式：加载静态文件
    const indexPath = path.join(__dirname, "web", "index.html");
    mainWindow.loadFile(indexPath);
    mainWindow.webContents.openDevTools();
  }

  // 窗口关闭时清理
  mainWindow.on("closed", () => {
    mainWindow = null;
  });
}

// 当 Electron 完成初始化并准备创建浏览器窗口时调用此方法
app.whenReady().then(createWindow);

// 当所有窗口都关闭时退出应用
app.on("window-all-closed", () => {
  // 在 macOS 上，当所有窗口都关闭时，应用通常会保持活动状态
  if (process.platform !== "darwin") {
    app.quit();
  }
});

app.on("activate", () => {
  // 在 macOS 上，当点击 dock 图标并且没有其他窗口打开时，
  // 通常会在应用程序中重新创建一个窗口
  if (BrowserWindow.getAllWindows().length === 0) {
    createWindow();
  }
});

// 处理未捕获的异常
process.on("uncaughtException", (error) => {
  console.error("未捕获的异常:", error);
});

process.on("unhandledRejection", (reason, promise) => {
  console.error("未处理的 Promise 拒绝:", reason);
});
